package de.e2it3t.schulverwaltung;

import de.e2it3t.schulverwaltung.data.TimeHelper;
import java.io.FileInputStream;
import java.sql.Time;
import java.util.Properties;

/**
 * Konfiguration der Applikation. <br>
 * <br>
 * Die Konfiguration wird aus der Datei <i>config.properties</i> geladen.
 * Der Zugriff erfolgt über {@link #getInstance()} oder {@link App#getConfig()}.
 * Beim ersten Zugriff wird die Konfiguration eingelesen.<br>
 * <br>
 * Enthaltene Konfigurationen:<br>
 * - Logindaten für die Postgres Datenbank
 * 
 * @author Markus Kunz und Viktor Reiser
 */
public class Config {
    
    private static Config instance = null;
    
    private String postgresHost;
    private int postgresPort;
    private String postgresDatabase;
    private String postgresUser;
    private String postgresPassword;
    
    
    private Config() {
        Properties config = new Properties();
        
        try {
            // lese die Konfiguration aus der Properties Datei
            FileInputStream fis = new FileInputStream("config.properties");
            config.load(fis);
            
            postgresHost = config.getProperty("postgresHost");
            postgresPort = Integer.parseInt(config.getProperty("postgresPort"));
            postgresDatabase = config.getProperty("postgresDatabase");
            postgresUser = config.getProperty("postgresUser");
            postgresPassword = config.getProperty("postgresPassword");
            
            fis.close();
        } catch (Exception ex) {
            throw new RuntimeException(
                    "Failed to load or read config.properties!", ex);
        }
    }
    
    
    /**
     * Instanz der Konfiguration. <br>
     * <br>
     * Durch das Singleton Pattern wird sichergestellt, dass die Konfiguration
     * nur einmal eingelesen wird.
     * 
     * @return Instanz der Konfiguration
     */
    static Config getInstance() {
        if (instance == null) {
            instance = new Config();
        }
        
        return instance;
    }
    

    public String getPostgresHost() {
        return postgresHost;
    }

    public int getPostgresPort() {
        return postgresPort;
    }

    public String getPostgresDatabase() {
        return postgresDatabase;
    }

    public String getPostgresUser() {
        return postgresUser;
    }

    public String getPostgresPassword() {
        return postgresPassword;
    }
    
    public int getMinutesInterval() {
        return 5;
    }
    
    public Time getMinimumTime() {
        return TimeHelper.getTimeFromString("7");
    }
    
    public Time getMaximumTime() {
        return TimeHelper.getTimeFromString("18");
    }
    
    public int getMinimumMinutes() {
        return 45;
    }
}
